iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
Security

從0開始的打Pwn教學系列 第 24

【Day-24】實戰 - Reverse

  • 分享至 

  • xImage
  •  

從Reverse到Stack buffer overflow都有概念之後,剩下的我們就從CTF實戰中繼續學習,我們先從Reverse的簡單題型開始。

在ctf.hackme.quest的CTF裡面,有一題toooomuch,我們先用它來練習。

把程式載下來之後它不會是一個可執行的程式,要先用chmod +x後才可以跑起來,然而跑起來後通常會發現它顯示【No such file or directory】,我們可以用file來查看這個檔案的相關資訊。
https://ithelp.ithome.com.tw/upload/images/20241008/20169016oBB8MVf7dC.jpg

發現到它是32bit的ELF,不過我們的環境是64位元,所以這個時候就要安裝libc6:i386讓程式能夠正常執行,Ubuntu用apt下載就可以了。
https://ithelp.ithome.com.tw/upload/images/20241008/20169016jEw1txtAUQ.jpg

現在程式可以正常執行了。
https://ithelp.ithome.com.tw/upload/images/20241008/20169016ftjtl1C5sd.png

我們來看看他在GDB中的樣子,但這邊可以看到它沒有讓我們輸入的gets,但有call一個toooomuch,猜測gets會在裡面。
https://ithelp.ithome.com.tw/upload/images/20241008/20169016d8vU8FnbXL.jpg

在這邊我們發現了gets,接著程式會繼續跑到check_passcode,這邊可以推測我們輸入字串後,它會在check_passcode分析我們的字串,如果不符合就會puts出You are not allowed here!,所以我們也需要看看check_passcode裡面在寫什麼。
https://ithelp.ithome.com.tw/upload/images/20241008/20169016XWH8hpvAHk.jpg

這個check_passcode程式不長,我們知道這個程式是在比較passcode是否正確,所以可以注意到有可能的關鍵點CMP,CMP在組合語言當中是比較的意思,那就注意到跟CMP有關的程式碼就好,CMP的位置是在EBP-0xc的地方,而看到CMP的上一行可以發現,EBP-0xc是放著EAX的值,而EAX是放著0x3039,0x3039的10進位是12345,再上面是atoi,atoi是C語言中將字串變成整數的一個函數,有點像是將Python的Str格式轉換成Int格式的功能。
https://ithelp.ithome.com.tw/upload/images/20241008/20169016hSW57uRh05.jpg

從這邊我們就能大概推論出來,我們會輸入一個字串,而這個字串會轉換成整數格式,因此我們的passcode應該會是數字,不然atoi無法順利轉換,再來我們輸入的值會加上12345,最後去比較是否有等於0xd903,而0xd903在10進位是55555。

透過簡單的數學X+12345=55555求X,X=55555-12345,X=43210,所以這題我們就解出來了 (灑花

這邊會有個小遊戲,完成後會找fake_flag,但因為我們沒有這個檔案,所以會出錯,我們nc到網站上去做就成功了。
https://ithelp.ithome.com.tw/upload/images/20241008/20169016kje6Gvhs0P.png
https://ithelp.ithome.com.tw/upload/images/20241008/20169016dtucRPNriv.jpg


上一篇
【Day-23】Return to function
下一篇
【Day-25】Stack 保護機制
系列文
從0開始的打Pwn教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言